topic "Ref";
[2 $$0,0#00000000000000000000000000000000:Default]
[i448;a25;kKO9;2 $$1,0#37138531426314131252341829483380:class]
[l288;2 $$2,2#27521748481378242620020725143825:desc]
[0 $$3,0#96390100711032703541132217272105:end]
[H6;0 $$4,0#05600065144404261032431302351956:begin]
[i448;a25;kKO9;2 $$5,0#37138531426314131252341829483370:item]
[l288;a4;*@5;1 $$6,6#70004532496200323422659154056402:requirement]
[l288;i1121;b17;O9;~~~.1408;2 $$7,0#10431211400427159095818037425705:param]
[i448;b42;O9;2 $$8,8#61672508125594000341940100500538:tparam]
[b42;2 $$9,9#13035079074754324216151401829390:normal]
[{_} 
[ {{10000@(113.42.0) [s0;%% [*@7;4 Ref]]}}&]
[s1;@(0.0.255)3 &]
[s1;:Ref`:`:class: [@(0.0.255)3 class][3 _][*3 Ref][3 _:_][@(0.0.255)3 private][3 _][*@3;3 Moveable][3 <
][*3 Ref][3 >_]&]
[s2;%% Generic reference to rich Value types and Value. Constructor 
from various rich Value creates Ref, which then can be used to 
assign values to original. Note that assigning Ref to Ref assigns 
the reference, not the value (in this regard, it works more like 
C`+`+ pointer than C`+`+ reference).&]
[s3; &]
[s0;i448;a25;kKO9;:noref:@(0.0.255) &]
[ {{10000F(128)G(128)@1 [s0;%% [* Public Method List]]}}&]
[s3; &]
[s5;:Ref`:`:GetType`(`)const: [_^dword^ dword]_[* GetType]()_[@(0.0.255) const]&]
[s2;%% Returns the type of referenced variable (same codes as for 
Value, value itself has VALUE`_V type).&]
[s3; &]
[s4; &]
[s5;:Ref`:`:IsNull`(`)const: [@(0.0.255) bool]_[* IsNull]()_[@(0.0.255) const]&]
[s2;%% Returns true if referenced variable contains Null.&]
[s3; &]
[s4; &]
[s5;:Ref`:`:Is`(`)const: [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T]>_[@(0.0.255) bool]_
[* Is]()_[@(0.0.255) const]&]
[s2;%% Returns true if referenced variable is of type [%-*@4 T].&]
[s3; &]
[s4; &]
[s5;:Ref`:`:Get`(`)const: [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T]>_[*@4 T][@(0.0.255) `&
]_[* Get]()_[@(0.0.255) const]&]
[s2; [%% Returns reference to referenced variable (Is<][*@4 T]> must 
be true, otherwise undefined).&]
[s3; &]
[s4; &]
[s5;:Ref`:`:SetNull`(`): [@(0.0.255) void]_[* SetNull]()&]
[s2;%% Sets Null to referenced variable.&]
[s3; &]
[s4; &]
[s5;:Ref`:`:GetValue`(`)const: [_^Value^ Value]_[* GetValue]()_[@(0.0.255) const]&]
[s2;%% Returns the content of referenced variable as Value.&]
[s3; &]
[s4; &]
[s5;:Ref`:`:SetValue`(const Value`&`): [@(0.0.255) void]_[* SetValue]([@(0.0.255) const]_[_^Value^ V
alue][@(0.0.255) `&]_[*@3 v])&]
[s2;%% Sets the content of referenced variable to [%-*@3 v].&]
[s3;%% &]
[s4; &]
[s5;:Ref`:`:operator Value`(`)const: [* operator_Value]()_[@(0.0.255) const]&]
[s2;%% Same as GetValue().&]
[s3; &]
[s4; &]
[s5;:Ref`:`:operator`~`(`)const: [_^Value^ Value]_[* operator`~]()_[@(0.0.255) const]&]
[s2;%% Same as GetValue().&]
[s3; &]
[s4; &]
[s5;:Ref`:`:operator`=`(const Value`&`): [_^Ref^ Ref][@(0.0.255) `&]_[* operator`=]([@(0.0.255) c
onst]_[_^Value^ Value][@(0.0.255) `&]_[*@3 v])&]
[s2;%% Same as SetValue([%-*@3 v]).&]
[s3;%% &]
[s4; &]
[s5;:Ref`:`:Ref`(String`&`): [* Ref]([_^String^ String][@(0.0.255) `&]_[*@3 s])&]
[s5;:Ref`:`:Ref`(WString`&`): [* Ref]([_^WString^ WString][@(0.0.255) `&]_[*@3 s])&]
[s5;:Ref`:`:Ref`(int`&`): [* Ref]([@(0.0.255) int`&]_[*@3 i])&]
[s5;:Ref`:`:Ref`(int64`&`): [* Ref]([_^int64^ int64][@(0.0.255) `&]_[*@3 i])&]
[s5;:Ref`:`:Ref`(double`&`): [* Ref]([@(0.0.255) double`&]_[*@3 d])&]
[s5;:Ref`:`:Ref`(bool`&`): [* Ref]([@(0.0.255) bool`&]_[*@3 b])&]
[s5;:Ref`:`:Ref`(Date`&`): [* Ref]([_^Date^ Date][@(0.0.255) `&]_[*@3 d])&]
[s5;:Ref`:`:Ref`(Time`&`): [* Ref]([_^Time^ Time][@(0.0.255) `&]_[*@3 t])&]
[s5;:Ref`:`:Ref`(Value`&`): [* Ref]([_^Value^ Value][@(0.0.255) `&]_[*@3 v])&]
[s2;%% Support for standard Value types and Value.&]
[s3;%% &]
[s4; &]
[s5;:Ref`:`:Ref`(`): [* Ref]()&]
[s2;%% Default constructor, constructs empty Ref (no variable referenced, 
no value can be assigned).&]
[s0;%% ]]